package ar.edu.utn.frsf.tpae.a2014.g01.dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import ar.edu.utn.frsf.tpae.a2014.g01.dao.UsuarioDAO;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Administrador;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Cliente;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Transportista;
import ar.edu.utn.frsf.tpae.a2014.g01.entidad.Usuario;

@Component
public class UsuarioHibernateDAO implements UsuarioDAO {

	private SessionFactory sessionFactory;
	
	@Autowired(required = true)
	  public void setSessionFactory(SessionFactory factory) {
		    this.sessionFactory = factory;
		  }

	  private Session getCurrentSession() {
	    return sessionFactory.getCurrentSession();
	  }

	@Override
	public Usuario validarUsuario(String usuario, String password) {

	    List <Usuario> list = getCurrentSession().createQuery("FROM Usuario WHERE usuario='"+usuario+"' and password='"+password+"'").list();
	    if(list.size()==1){
	    	int id = list.get(0).getId();
	    	Usuario usuarioRetorno = (Usuario) getCurrentSession().get(Cliente.class, id);
	    	if(usuarioRetorno!=null) return usuarioRetorno;
	    	else{
	    		usuarioRetorno = (Usuario) getCurrentSession().get(Transportista.class, id);
	    		if(usuarioRetorno!=null) return usuarioRetorno;
	    		else{
	    			return (Usuario) getCurrentSession().get(Administrador.class, id);
	    		}
	    	}
	  
	    }
	    else return null;

	}

	@Override
	public List<Transportista> buscarTransportistas() {

	    List list = getCurrentSession().createQuery("FROM Transportista").list();

	    return list;
	}
	
	public void crearTransportista(Transportista tra){
		getCurrentSession().save(tra);
	}
	
	@Override
	public List<Cliente> buscarClientes() {

	    List list = getCurrentSession().createQuery("FROM Cliente").list();

	    return list;
	}


}
